home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / jcool01.zip / TEST_M_V.C < prev    next >
C/C++ Source or Header  |  1992-08-26  |  6KB  |  200 lines

  1. //
  2. // Copyright (C) 1991 Texas Instruments Incorporated.
  3. // Copyright (C) 1992 General Electric Company.
  4. //
  5. // Permission is granted to any individual or institution to use, copy, modify,
  6. // and distribute this software, provided that this complete copyright and
  7. // permission notice is maintained, intact, in all copies and supporting
  8. // documentation.
  9. //
  10. // Texas Instruments Incorporated, General Electric Company,
  11. // provides this software "as is" without express or implied warranty.
  12. //
  13.  
  14. #include <cool/M_Vector.h>
  15. #include <cool/Matrix.h>
  16. #include <test.h>
  17.  
  18. #include <cool/M_Vector.C>
  19. #include <cool/Matrix.C>
  20.  
  21. Boolean Vector_is_data_equal (const int& i1, const int& i2) {
  22.   return ((fabs(i1 - i2) < 1.0e-12) ? TRUE : FALSE);
  23. }
  24.  
  25. void test_int () {
  26.   //// test constructors, accessors
  27.   CoolM_Vector<int> v0;
  28.   TEST ("CoolM_Vector<int> v0()", (v0.length()==0 || v0.length()==1), TRUE);
  29.   CoolM_Vector<int> v1(2);
  30.   TEST ("CoolM_Vector<int> v1(2)", (v1.length()==2), TRUE);
  31.   CoolM_Vector<int> v2(2,2);
  32.   TEST ("CoolM_Vector<int> v2(2,2)",
  33.     (v2.get(0)==2 && v2.get(1)==2), TRUE);
  34.   TEST ("v0.set_compare", (v0.set_compare(&Vector_is_data_equal), TRUE), TRUE);
  35.   TEST ("v1=2", 
  36.     (v1=2, (v1.get(0)==2 && v1.get(1)==2)), TRUE);
  37.   TEST ("v1 == v2", (v1 == v2), TRUE);
  38.   TEST ("v0 = v2", ((v0 = v2), (v0 == v2)), TRUE);
  39.   TEST ("v2.put(1,3)", (v2.put(1,3),v2.get(1)), 3);
  40.   TEST ("v2.get(1)", v2.get(1), 3);
  41.   TEST ("v0 == v2", (v0 == v2), FALSE);
  42.   TEST ("v0 != v2", (v0 != v2), TRUE);
  43.   TEST ("(v0 == v2)", (v0 == v2), FALSE);
  44.   TEST ("v1.fill(3)",
  45.     (v1.fill(3), (v1.get(0)==3 && v1.get(1)==3)), TRUE);
  46.   TEST ("v2.fill(2)",
  47.     (v2.fill(2), (v2.get(0)==2 && v2.get(1)==2)), TRUE);
  48.   CoolM_Vector<int> v3(3,3,1,2,3);
  49.   TEST ("v3(3,3,1,2,3)",(v3.get(0)==1 && v3.get(1)==2 && v3.get(2)==3), TRUE);
  50.   CoolM_Vector<int> v4(v3);
  51.   TEST ("CoolM_Vector<int> v4(v3)", (v3==v4), TRUE);
  52.   TEST ("v0=v2", (v0=v2, (v0==v2)), TRUE);
  53.  
  54.   //// test additions and substractions
  55.   TEST ("v0=v2+3",
  56.     ((v0=v2+3), (v0.get(0)==5 && v0.get(1)==5)), TRUE);
  57.   TEST ("v0=3+v2",
  58.     ((v0=3+v2), (v0.get(0)==5 && v0.get(1)==5)), TRUE);
  59.   TEST ("v0+=(-3)",
  60.     (v0+=(-3), (v0.get(0)==2 && v0.get(1)==2)), TRUE);
  61.   TEST ("v0-=(-3)",
  62.     (v0-=(-3), (v0.get(0)==5 && v0.get(1)==5)), TRUE);
  63.   TEST ("v0=v2-3",
  64.     ((v0=v2-3), (v0.get(0)==-1 && v0.get(1)==-1)), TRUE);
  65.   TEST ("v0=3-v2",
  66.     ((v0=3-v2), (v0.get(0)==1 && v0.get(1)==1)), TRUE);
  67.   TEST ("v0= -v2",
  68.     (v0= -v2, (v0.get(0)==-2 && v0.get(1)==-2)), TRUE);
  69.  
  70.   CoolM_Vector<int> v5(2);
  71.   v0 = v2;
  72.   TEST ("v5=v0+v2",
  73.     ((v5=v0+v2), (v5.get(0)==4 && v5.get(1)==4)), TRUE);
  74.   TEST ("v5=v0-v2",
  75.     ((v5=v0-v2), (v5.get(0)==0 && v5.get(1)==0)), TRUE);
  76.   TEST ("v0+=v2", 
  77.     ((v0+=v2), (v0.get(0)==4 && v0.get(1)==4)), TRUE);
  78.   TEST ("v0-=v2", 
  79.     ((v0-=v2), (v0.get(0)==2 && v0.get(1)==2)), TRUE);
  80.  
  81.   //// test multiplications and divisions
  82.   TEST ("v4=v3*5",
  83.     ((v4=v3*5), (v4.get(0)==5 && v4.get(1)==10 && v4.get(2)==15)), TRUE);
  84.      
  85.   TEST ("v4=5*v3",
  86.     ((v4=5*v3), (v4.get(0)==5 && v4.get(1)==10 && v4.get(2)==15)), TRUE);
  87.   TEST ("v3*=5",((v3*=5), (v3== v4)), TRUE);
  88.   TEST ("v4=v3/5",
  89.     ((v4=v3/5), (v4.get(0)==1 && v4.get(1)==2 && v4.get(2)==3)), TRUE);
  90.   TEST ("v3/=5", ((v3/=5), (v3==v4)), TRUE);
  91.  
  92.   //// additional tests
  93.   CoolM_Vector<int> v(4,4,0,-2,2,0);
  94.   v0 = v; v1 = v; v2 = v;
  95.   TEST ("v(i)", 
  96.     (v(0)==0 && v(1)==-2 && v(2)==2 && v(3)==0), TRUE);
  97.   TEST ("v.abs()",
  98.     ((v1 = v.abs()), 
  99.      (v1(0)==0 && v1(1)==2 && v1(2)==2 && v1(3)==0)), TRUE);
  100.   TEST ("v.sign()",
  101.     ((v1 = v.sign()),
  102.      (v1(0)==0 && v1(1)==-1 && v1(2)==1 && v1(3)==0)), TRUE);
  103.   TEST ("element_product(v,v)",
  104.     ((v1 = element_product(v,v)),
  105.      (v1(0)==0 && v1(1)==4 && v1(2)==4 && v1(3)==0)), TRUE);
  106.   TEST ("element_quotient(v,[2])",
  107.     ((v2 = 2),
  108.      (v1 = element_quotient(v,v2)),
  109.      (v1(0)==0 && v1(1)==-1 && v1(2)==1 && v1(3)==0)), TRUE);
  110.   TEST ("v.update(v.abs())",
  111.     ((v1 = v.abs()),
  112.      (v2.update(v1)), 
  113.      (v2==v1)), TRUE);
  114.   TEST ("v.extract(1,3)",
  115.     ((v1 = v.extract(1,3)),
  116.      (v1.length()==1 && v1(0)==v(3))), TRUE);
  117.   TEST ("v.update([4],3)",
  118.     ((v1=4),
  119.      (v.update(v1,3)),
  120.      (v(0)==0 && v(1)==-2 && v(2)==2 && v(3)==4)), TRUE);
  121.   
  122.   {                        // new scope to reuse variables
  123.     CoolM_Vector<int> v (4,4,1,0,0,0);
  124.     TEST ("v(i)", 
  125.       (v(0)==v.x() && v.x()==1 &&
  126.        v(1)==v.y() && v.y()==0 &&
  127.        v(2)==v.z() && v.z()==0 &&
  128.        v(3)==v.t() && v.t()==0), TRUE);
  129.     CoolM_Vector<int> v1(3,3,1,0,0);
  130.     CoolM_Vector<int> v2(3,3,0,1,0);
  131.     CoolM_Vector<int> v3(3,3,0,0,1);
  132.     TEST ("dot_product(v1,v2)",
  133.       (dot_product(v1,v2)==0 && dot_product(v1,v3)==0 && dot_product(v2,v3)==0), TRUE);
  134.     TEST ("4d-v=3d-v", 
  135.       ((v = v3), v.length()==3 && v==v3), TRUE);
  136.     TEST ("cross_3d(v1,v2)", (v=cross_3d(v1,v2), v == v3), TRUE);
  137.     TEST ("cross_3d(v2,v3)", (v=cross_3d(v2,v3), v == v1), TRUE);
  138.     TEST ("cross_3d(v1,v3)", (v=cross_3d(v1,v3), v == -v2), TRUE);
  139.     CoolM_Vector<int> vv(2,0);
  140.     v1 = vv; v1.x()=1;
  141.     v2 = vv; v2.y()=1;
  142.     TEST ("cross_2d(v1,v2)", cross_2d(v1,v2)==1, TRUE);
  143.   }
  144.  
  145.   {
  146.     CoolM_Vector<int> v (4,4,1,0,0,0);
  147.     TEST ("v.squared_magnitude",
  148.       (v.squared_magnitude()==1), TRUE);
  149.     TEST ("v.magnitude",
  150.       (v.magnitude()==1), TRUE);
  151.     TEST ("v.normalize",
  152.       ((v1 = 3 * v),
  153.        (v1.normalize()), v1 == v), TRUE);
  154.   }
  155.  
  156. }
  157.  
  158. void test_matrix() {                // product with matrices
  159.   CoolMatrix<int> m(2,3,6,
  160.             1,2,3,
  161.             4,5,6);
  162.   CoolM_Vector<int> v, v2(2,2,1,0), v3(3,3,1,0,0);
  163.   TEST ("v.pre_multiply(m)",
  164.     ((v = v3), 
  165.      (v.pre_multiply(m)), 
  166.      (v.length()==2 && v(0)==1 && v(1)==4)), TRUE);
  167.   TEST ("v.post_multiply(m)",
  168.     ((v = v2), 
  169.      (v.post_multiply(m)), 
  170.      (v.length()==3 && v(0)==1 && v(1)==2 && v(2)==3)), TRUE);
  171.   TEST ("v*=m",
  172.     ((v = v2),
  173.      (v *= m),
  174.      (v.length()==3 && v(0)==1 && v(1)==2 && v(2)==3)), TRUE);
  175.   TEST ("v2*m",
  176.     ((v = v2 * m),
  177.      (v.length()==3 && v(0)==1 && v(1)==2 && v(2)==3)), TRUE);
  178.   TEST ("m*v3",
  179.     ((v = m * v3),
  180.      (v.length()==2 && v(0)==1 && v(1)==4)), TRUE);
  181. }
  182.  
  183. void test_leak() {                // use top4.1 to watch for memory
  184.   for (;;) {                    // remember to kill process.
  185.     test_int ();
  186.     test_matrix ();
  187.   }
  188. }
  189.    
  190. int main (void) {
  191.   START("CoolM_Vector");
  192.   test_int ();
  193.   test_matrix ();
  194. #if LEAK
  195.   test_leak ();
  196. #endif
  197.   SUMMARY();
  198.   return 0;
  199. }
  200.